--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
nomadnet/ui/textui/Browser.py 5ceb0c671e4a2020efaa627d3f118af76ebcc5c4 (5ceb0c67) Text, 54.66 KB
Tff7b72import T7ee787RNS
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787io
Tff7b72import T7ee787os
Tff7b72import T7ee787time
Tff7b72import T7ee787urwid
Tff7b72import T7ee787shutil
Tff7b72import T7ee787nomadnet
Tff7b72import T7ee787subprocess
Tff7b72import T7ee787threading
Tff7b72from T7ee787.T7ee787MicronParser Tff7b72import Te6edf3markup_to_attrmapsTb4b4b4, Te6edf3make_styleTb4b4b4, Te6edf3default_state
Tff7b72from T7ee787nomadnetT7ee787.T7ee787Directory Tff7b72import Te6edf3DirectoryEntry
Tff7b72from T7ee787nomadnetT7ee787.T7ee787vendorT7ee787.T7ee787Scrollable Tff7b72import Tff7b72*
Tff7b72from T7ee787nomadnetT7ee787.T7ee787util Tff7b72import Te6edf3strip_modifiers
Tff7b72class T56d364BrowserFrameTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffFrameTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl wTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffdisconnectTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl dTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffbackTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl fTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffforwardTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl rTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffreloadTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl uTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffurl_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl sTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffsave_node_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl bTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffsave_node_dialogTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffctrl gTa5d6ff"Tb4b4b4:
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffnetwork_displayTff7b72.Td2a8fftoggle_fullscreenTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8fffocus_position Tff7b72== Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffdownTa5d6ff" Tff7b72or Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffupTa5d6ff"Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdelegateTb4b4b4, Ta5d6ff"Ta5d6ffpage_pileTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffpage_pileTb4b4b4:
Tff7b72def Td2a8ffdfTb4b4b4(Te6edf3loopTb4b4b4, Te6edf3user_dataTb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Tff7b72None
Te6edf3nf Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffpage_pileTff7b72.Td2a8fffocus
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3nfTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3nf
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3nfTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3no Tff7b72= Te6edf3nfTff7b72.Td2a8fforiginal_widget
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3noTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3noTff7b72.Td2a8fforiginal_widget
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3noTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3no
Tff7b72if Te6edf3st Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3stTb4b4b4, Ta5d6ff"Ta5d6ffkey_timeoutTa5d6ff"Tb4b4b4) Tff7b72and Tffa657hasattrTb4b4b4(Te6edf3stTb4b4b4, Ta5d6ff"Ta5d6ffkeypressTa5d6ff"Tb4b4b4) Tff7b72and Tffa657callableTb4b4b4(Te6edf3stTff7b72.Td2a8ffkeypressTb4b4b4)Tb4b4b4:
Te6edf3stTff7b72.Td2a8ffkeypressTb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff0.25Tb4b4b4, Te6edf3dfTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while setting up cursor timeout. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tffa657superTb4b4b4(Te6edf3BrowserFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3BrowserFrameTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364BrowserTb4b4b4:
Te6edf3DEFAULT_PATH Tff7b72= Ta5d6ff"Ta5d6ff/page/index.muTa5d6ff"
Te6edf3DEFAULT_TIMEOUT Tff7b72= T79c0ff10
Te6edf3DEFAULT_CACHE_TIME Tff7b72= T79c0ff12Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Te6edf3NO_PATH Tff7b72= T79c0ff0x00
Te6edf3PATH_REQUESTED Tff7b72= T79c0ff0x01
Te6edf3ESTABLISHING_LINK Tff7b72= T79c0ff0x02
Te6edf3LINK_TIMEOUT Tff7b72= T79c0ff0x03
Te6edf3LINK_ESTABLISHED Tff7b72= T79c0ff0x04
Te6edf3REQUESTING Tff7b72= T79c0ff0x05
Te6edf3REQUEST_SENT Tff7b72= T79c0ff0x06
Te6edf3REQUEST_FAILED Tff7b72= T79c0ff0x07
Te6edf3REQUEST_TIMEOUT Tff7b72= T79c0ff0x08
Te6edf3RECEIVING_RESPONSE Tff7b72= T79c0ff0x09
Te6edf3DISCONECTED Tff7b72= T79c0ff0xFE
Te6edf3DONE Tff7b72= T79c0ff0xFF
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4, Te6edf3app_nameTb4b4b4, Te6edf3aspectsTb4b4b4, Te6edf3destination_hash Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3path Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3auth_identity Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3delegate Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffg Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffglyphs
Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72= Te6edf3delegate
Tff7b72selfTff7b72.Td2a8ffapp_name Tff7b72= Te6edf3app_name
Tff7b72selfTff7b72.Td2a8ffaspects Tff7b72= Te6edf3aspects
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3destination_hash
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3path
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_TIMEOUT
Tff7b72selfTff7b72.Td2a8fflast_keypress Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffloopback Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffdisplayed_page_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffauth_identity Tff7b72= Te6edf3auth_identity
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflink_target Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffframe Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbuild_displayTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclean_cacheTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcurrent_urlTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpath Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3path Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8ffpath
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3path
Tff7b72def Td2a8ffurl_hashTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3url Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3url Tff7b72= Te6edf3urlTff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffull_hashTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8ffmarked_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_target Tff7b72= Te6edf3link_target
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffloopTff7b72.Td2a8ffset_alarm_inTb4b4b4(T79c0ff0.1Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffmarked_link_jobTb4b4b4)
Tff7b72def Td2a8ffmarked_link_jobTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3eventTb4b4b4)Tb4b4b4:
Te6edf3link_target Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_target
Tff7b72if Te6edf3link_target Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink_status_showingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_status_showing Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffLink to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72def Td2a8ffexpand_shorthandsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_typeTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffnnnTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6fflxmfTa5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Te6edf3destination_type
Tff7b72def Td2a8ffhandle_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4, Te6edf3link_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3request_data Tff7b72= Tff7b72None
Tff7b72if Te6edf3link_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3link_fields Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3request_data Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3all_fields Tff7b72= Tff7b72True Tff7b72if Ta5d6ff"Ta5d6ff*Ta5d6ff" Tff7b72in Te6edf3link_data Tff7b72else Tff7b72False
Tff7b72for Te6edf3e Tff7b72in Te6edf3link_dataTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff=Ta5d6ff" Tff7b72in Te6edf3eTb4b4b4:
Te6edf3c Tff7b72= Te6edf3eTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff=Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3cTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3request_dataTb4b4b4[Ta5d6ff"Ta5d6ffvar_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3cTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3link_fieldsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72def Td2a8ffrecurse_downTb4b4b4(Te6edf3wTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Tffa657tupleTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3t Tff7b72in Te6edf3wTb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3tTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffcontentsTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ffcontentsTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fforiginal_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8fforiginal_widgetTb4b4b4)
Tff7b72elif Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ff_original_widgetTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3recurse_downTb4b4b4(Te6edf3wTff7b72.Td2a8ff_original_widgetTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_nameTa5d6ff"Tb4b4b4) Tff7b72and Tb4b4b4(Te6edf3all_fields Tff7b72or Te6edf3wTff7b72.Td2a8fffield_name Tff7b72in Te6edf3link_fieldsTb4b4b4)Tb4b4b4:
Te6edf3field_key Tff7b72= Ta5d6ff"Ta5d6fffield_Ta5d6ff" Tff7b72+ Te6edf3wTff7b72.Td2a8fffield_name
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3wTff7b72.Td2a8ffedit_text
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffRadioButtonTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72if Te6edf3user_data Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3wTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffCheckBoxTb4b4b4)Tb4b4b4:
Te6edf3user_data Tff7b72= Tffa657getattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6fffield_valueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3wTff7b72.Td2a8ffstateTb4b4b4:
Te6edf3existing_value Tff7b72= Te6edf3request_dataTff7b72.Td2a8ffgetTb4b4b4(Te6edf3field_keyTb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tff7b72if Te6edf3existing_valueTb4b4b4:
T8b949e# Concatenate the new value with the existing one
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3existing_value Tff7b72+ Ta5d6ff'Ta5d6ff,Ta5d6ff' Tff7b72+ Te6edf3user_data
Tff7b72elseTb4b4b4:
T8b949e# Initialize the field with the current value
Te6edf3request_dataTb4b4b4[Te6edf3field_keyTb4b4b4] Tff7b72= Te6edf3user_data
Tff7b72elseTb4b4b4:
Tff7b72pass T8b949e# do nothing if checkbox is not check
Te6edf3recurse_downTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffIncluding request data: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3request_dataTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3components Tff7b72= Te6edf3link_targetTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff@Ta5d6ff"Tb4b4b4)
Te6edf3destination_type Tff7b72= Tff7b72None
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Te6edf3destination_type Tff7b72= Tff7b72selfTff7b72.Td2a8ffexpand_shorthandsTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Te6edf3link_target Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3destination_type Tff7b72= Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"
Te6edf3link_target Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6ffnomadnetwork.nodeTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72>Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser handling link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffOpening link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3link_targetTb4b4b4, Te6edf3request_dataTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser already handling link, cannot handle link to: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3link_targetTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elif Te6edf3destination_type Tff7b72== Ta5d6ff"Ta5d6fflxmf.deliveryTa5d6ff"Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPassing LXMF link to handlerTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandle_lxmf_linkTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo known handler for destination type Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3destination_typeTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Ta5d6ff"Ta5d6ffNo known handler for destination type Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3destination_typeTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffhandle_lxmf_linkTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3link_targetTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tffa657typeTb4b4b4(Te6edf3link_targetTb4b4b4) Tff7b72is Tffa657strTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid data type for LXMF linkTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3link_targetTb4b4b4) Tff7b72!= Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffInvalid length for LXMF linkTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3link_targetTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not decode destination hash from LXMF linkTa5d6ff"Tb4b4b4)
Te6edf3existing_conversations Tff7b72= Te6edf3nomadnetTff7b72.Td2a8ffConversationTff7b72.Td2a8ffconversation_listTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTb4b4b4)
Te6edf3source_hash_text Tff7b72= Te6edf3link_target
Te6edf3display_name_data Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3source_hash_textTb4b4b4)Tb4b4b4)
Te6edf3display_name Tff7b72= Tff7b72None
Tff7b72if Te6edf3display_name_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3display_name Tff7b72= Te6edf3LXMFTff7b72.Td2a8ffdisplay_name_from_app_dataTb4b4b4(Te6edf3display_name_dataTb4b4b4)
Tff7b72if Tff7b72not Te6edf3source_hash_text Tff7b72in Tb4b4b4[Te6edf3cTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72for Te6edf3c Tff7b72in Te6edf3existing_conversationsTb4b4b4]Tb4b4b4:
Te6edf3entry Tff7b72= Te6edf3DirectoryEntryTb4b4b4(Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3source_hash_textTb4b4b4)Tb4b4b4, Te6edf3display_nameTff7b72=Te6edf3display_nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3entryTb4b4b4)
Te6edf3new_conversation Tff7b72= Te6edf3nomadnetTff7b72.Td2a8ffConversationTb4b4b4(Te6edf3source_hash_textTb4b4b4, Te6edf3nomadnetTff7b72.Td2a8ffNomadNetworkAppTff7b72.Td2a8ffget_shared_instanceTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3initiatorTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffconversations_displayTff7b72.Td2a8ffupdate_conversation_listTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffconversations_displayTff7b72.Td2a8ffdisplay_conversationTb4b4b4(Tff7b72NoneTb4b4b4, Te6edf3source_hash_textTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffshow_conversationsTb4b4b4(Tff7b72NoneTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while starting conversation from link. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open LXMF link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffmicron_released_focusTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdelegate Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8fffocus_listsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffbuild_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffDisconnectedTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframe Tff7b72= Te6edf3BrowserFrameTb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTb4b4b4, Te6edf3headerTff7b72=Tff7b72selfTff7b72.Td2a8ffbrowser_headerTb4b4b4, Te6edf3footerTff7b72=Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8fflinebox Tff7b72= Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4(Tff7b72selfTff7b72.Td2a8ffframeTb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffRemote NodeTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Tff7b72selfTff7b72.Td2a8fflineboxTb4b4b4, Ta5d6ff"Ta5d6ffinactive_textTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_status_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Te6edf3style_name_inverted Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3style_name Tff7b72= Ta5d6ff"Ta5d6ffprogress_emptyTa5d6ff"
Te6edf3style_name_inverted Tff7b72= Ta5d6ff"Ta5d6ffprogress_fullTa5d6ff"
Te6edf3pb Tff7b72= Te6edf3ResponseProgressBarTb4b4b4(Te6edf3style_name Tb4b4b4, Te6edf3style_name_invertedTb4b4b4, Te6edf3currentTff7b72=Tff7b72selfTff7b72.Td2a8ffresponse_progressTb4b4b4, Te6edf3doneTff7b72=T79c0ff1.0Tb4b4b4, Te6edf3sattTff7b72=Tff7b72NoneTb4b4b4, Te6edf3ownerTff7b72=Tff7b72selfTb4b4b4)
Te6edf3widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3pbTb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3widget Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3widgetTb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_control_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffnodeTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffDividerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffdivider1Ta5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4]Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffbrowser_controlsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmake_request_failed_widgetTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffback_actionTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffprevious_destination_hash
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Tff7b72selfTff7b72.Td2a8ffprevious_path
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3columns Tff7b72= Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.5Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(T79c0ff8Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffBackTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3back_actionTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.5Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff!Tffea00\nTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3columns
Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff!Tffea00\nTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffstatus_textTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(Te6edf3pileTb4b4b4, Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4)
Tff7b72def Td2a8ffupdate_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Ta5d6ff"Ta5d6ffinactive_textTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffDisconnectedTffea00\nTa5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_lTa5d6ff"Tb4b4b4]Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_rTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflineboxTff7b72.Td2a8ffset_titleTb4b4b4(Ta5d6ff"Ta5d6ffRemote NodeTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Ta5d6ff"Ta5d6ffbody_textTa5d6ff"Tb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_header Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_control_widgetTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3remote_display_string Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffsimplest_display_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3remote_display_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffloopback Tff7b72!= Tff7b72None Tff7b72and Te6edf3remote_display_string Tff7b72== Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4)Tb4b4b4:
Te6edf3remote_display_string Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffnodeTff7b72.Td2a8ffname
Tff7b72selfTff7b72.Td2a8fflineboxTff7b72.Td2a8ffset_titleTb4b4b4(Te6edf3remote_display_stringTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_page_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUTTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72<Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENTTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffFillerTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffRetrievingTffea00\nTa5d6ff[Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tb4b4b4, Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_status_widgetTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72!= Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3style_name Tff7b72= Te6edf3make_styleTb4b4b4(Te6edf3default_stateTb4b4b4(Te6edf3fgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bgTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_headerTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTff7b72.Td2a8ffset_attr_mapTb4b4b4(Tb4b4b4{Tff7b72NoneTb4b4b4: Te6edf3style_nameTb4b4b4}Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILEDTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUTTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Tff7b72selfTff7b72.Td2a8ffmake_request_failed_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72pass
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6ffbodyTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_bodyTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6ffheaderTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_headerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffupdate_page_displayTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3pile Tff7b72= Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffattr_mapsTb4b4b4)
Te6edf3pileTff7b72.Td2a8ffautomove_cursor_on_scroll Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffpage_pile Tff7b72= Te6edf3pile
Tff7b72selfTff7b72.Td2a8ffbrowser_body Tff7b72= Te6edf3urwidTff7b72.Td2a8ffAttrMapTb4b4b4(Te6edf3ScrollBarTb4b4b4(Te6edf3ScrollableTb4b4b4(Te6edf3pileTb4b4b4, Te6edf3force_forward_keypressTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4, Te6edf3thumb_charTff7b72=Ta5d6ff"Tffea00\u2503Ta5d6ff"Tb4b4b4, Te6edf3trough_charTff7b72=Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffscrollbarTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffidentifyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffidentifyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffauth_identityTb4b4b4)
Tff7b72def Td2a8ffdisconnectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffretrieve_urlTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4, Te6edf3request_data Tff7b72= Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffprevious_destination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Tff7b72selfTff7b72.Td2a8ffprevious_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffpath
Te6edf3destination_hash Tff7b72= Tff7b72None
Te6edf3path Tff7b72= Tff7b72None
Te6edf3components Tff7b72= Te6edf3urlTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff1Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elif Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4)Tff7b72*T79c0ff2Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3destination_hash Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3destination_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Te6edf3path Tff7b72= Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tffa657lenTb4b4b4(Te6edf3pathTb4b4b4) Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_PATH
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMalformed URLTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3destination_hash Tff7b72!= Tff7b72None Tff7b72and Te6edf3path Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3pathTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff/file/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3destination_hash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4:
Tff7b72if Te6edf3destination_hash Tff7b72== Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdownload_fileTb4b4b4(Te6edf3destination_hashTb4b4b4, Te6edf3pathTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCannot request file download from a node that is not currently connected.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe requested URL was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3urlTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdownload_local_fileTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffset_destination_hashTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_pathTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_request_dataTb4b4b4(Te6edf3request_dataTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffset_destination_hashTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3destination_hashTb4b4b4) Tff7b72== Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3destination_hash
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffset_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffpath Tff7b72= Te6edf3path
Tff7b72def Td2a8ffset_request_dataTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_dataTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72= Te6edf3request_data
Tff7b72def Td2a8ffset_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3timeoutTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftimeout Tff7b72= Te6edf3timeout
Tff7b72def Td2a8ffdownload_local_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3file_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fffilespathTff7b72+Te6edf3pathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/fileTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3file_pathTb4b4b4)
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3fs Tff7b72= Tffa657openTb4b4b4(Te6edf3file_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3fd Tff7b72= Tffa657openTb4b4b4(Te6edf3file_destinationTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fdTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3fsTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3fdTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3fsTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Te6edf3file_destinationTff7b72.Td2a8ffreplaceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe requested local download file does not exist: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling file response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffdownload_fileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3destination_hashTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72== Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffNO_PATH
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8fffirst_hop_timeoutTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3pr_timeTff7b72+Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_timeoutTb4b4b4(Tb4b4b4)
Tff7b72return
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINK
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffaspects
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3established_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_closedTb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72None Tff7b72and Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72== Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
T8b949e# Send the request
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUESTING
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3receipt Tff7b72= Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrequestTb4b4b4(
Te6edf3pathTb4b4b4,
Te6edf3data Tff7b72= Tff7b72NoneTb4b4b4,
Te6edf3response_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fffile_receivedTb4b4b4,
Te6edf3failed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_failedTb4b4b4,
Te6edf3progress_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progressed
Tb4b4b4)
Tff7b72if Te6edf3receiptTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_request_receipt Tff7b72= Te6edf3receipt
Tff7b72selfTff7b72.Td2a8fflast_request_id Tff7b72= Te6edf3receiptTff7b72.Td2a8ffrequest_id
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENT
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffwrite_historyTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3entry Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistoryTff7b72.Td2a8ffinsertTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4, Te6edf3entryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72+Tff7b72= T79c0ff1
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Tb4b4b4:Tff7b72selfTff7b72.Td2a8ffhistory_ptrTb4b4b4]
Tff7b72def Td2a8ffbackTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3target_ptr Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistory_ptrTff7b72-T79c0ff1
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_decTb4b4b4:
Tff7b72if Te6edf3target_ptr Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72True
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Te6edf3target_ptrTff7b72-T79c0ff1Tb4b4b4]
Te6edf3url Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= Te6edf3target_ptr
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3urlTb4b4b4)
Tff7b72def Td2a8ffforwardTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3target_ptr Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistory_ptrTff7b72+T79c0ff1
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_decTb4b4b4:
Tff7b72if Te6edf3target_ptr Tff7b72<Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72True
Te6edf3entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffhistoryTb4b4b4[Te6edf3target_ptrTff7b72-T79c0ff1Tb4b4b4]
Te6edf3url Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Te6edf3entryTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff:Ta5d6ff"Tff7b72+Te6edf3entryTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhistory_ptr Tff7b72= Te6edf3target_ptr
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3urlTb4b4b4)
Tff7b72def Td2a8ffreloadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72and Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffload_pageTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffclose_dialogsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffdisplay_widgetTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72def Td2a8ffurl_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3e_url Tff7b72= Te6edf3UrlEditTb4b4b4(Te6edf3captionTff7b72=Ta5d6ff"Ta5d6ffURL : Ta5d6ff"Tb4b4b4, Te6edf3edit_textTff7b72=Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffretrieve_urlTb4b4b4(Te6edf3e_urlTff7b72.Td2a8ffget_edit_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffbrowser_footer Tff7b72= Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffCould not open link: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffcontentsTb4b4b4[Ta5d6ff"Ta5d6fffooterTa5d6ff"Tb4b4b4] Tff7b72= Tb4b4b4(Tff7b72selfTff7b72.Td2a8ffbrowser_footerTb4b4b4, Tff7b72selfTff7b72.Td2a8ffframeTff7b72.Td2a8ffoptionsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3UrlDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3e_urlTb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffGoTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffEnter URLTa5d6ff"
Tb4b4b4)
Te6edf3e_urlTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplay_widget
Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(
Te6edf3dialogTb4b4b4,
Te6edf3bottomTb4b4b4,
Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4,
Te6edf3widthTff7b72=Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffRELATIVETb4b4b4, T79c0ff65Tb4b4b4)Tb4b4b4,
Te6edf3valignTff7b72=Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4,
Te6edf3leftTff7b72=T79c0ff2Tb4b4b4,
Te6edf3rightTff7b72=T79c0ff2Tb4b4b4,
Tb4b4b4)
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72def Td2a8ffsave_node_dialogTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72def Td2a8ffdismiss_dialogTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3display_name Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecall_app_dataTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3disp_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3display_name Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3display_name Tff7b72= Te6edf3display_nameTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3disp_str Tff7b72= Ta5d6ff"Ta5d6ff Tffea00\"Ta5d6ff"Tff7b72+Te6edf3display_nameTff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"
Tff7b72def Td2a8ffconfirmedTb4b4b4(Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3node_entry Tff7b72= Te6edf3DirectoryEntryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4, Te6edf3display_nameTff7b72=Te6edf3display_nameTb4b4b4, Te6edf3hosts_nodeTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffrememberTb4b4b4(Te6edf3node_entryTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffuiTff7b72.Td2a8ffmain_displayTff7b72.Td2a8ffsub_displaysTff7b72.Td2a8ffnetwork_displayTff7b72.Td2a8ffdirectory_change_callbackTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3UrlDialogLineBoxTb4b4b4(
Te6edf3urwidTff7b72.Td2a8ffPileTb4b4b4(Tb4b4b4[
Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ffSave connected nodeTa5d6ff"Tff7b72+Te6edf3disp_strTff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to Known Nodes?Tffea00\nTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3urwidTff7b72.Td2a8ffColumnsTb4b4b4(Tb4b4b4[
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3dismiss_dialogTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.1Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffTextTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, T79c0ff0.45Tb4b4b4, Te6edf3urwidTff7b72.Td2a8ffButtonTb4b4b4(Ta5d6ff"Ta5d6ffSaveTa5d6ff"Tb4b4b4, Te6edf3on_pressTff7b72=Te6edf3confirmedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4)
Tb4b4b4]Tb4b4b4)Tb4b4b4, Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffSave NodeTa5d6ff"
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffconfirmed Tff7b72= Te6edf3confirmed
Te6edf3dialogTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Te6edf3bottom Tff7b72= Tff7b72selfTff7b72.Td2a8ffdisplay_widget
Te6edf3overlay Tff7b72= Te6edf3urwidTff7b72.Td2a8ffOverlayTb4b4b4(
Te6edf3dialogTb4b4b4,
Te6edf3bottomTb4b4b4,
Te6edf3alignTff7b72=Te6edf3urwidTff7b72.Td2a8ffCENTERTb4b4b4,
Te6edf3widthTff7b72=Tb4b4b4(Te6edf3urwidTff7b72.Td2a8ffRELATIVETb4b4b4, T79c0ff50Tb4b4b4)Tb4b4b4,
Te6edf3valignTff7b72=Te6edf3urwidTff7b72.Td2a8ffMIDDLETb4b4b4,
Te6edf3heightTff7b72=Te6edf3urwidTff7b72.Td2a8ffPACKTb4b4b4,
Te6edf3leftTff7b72=T79c0ff2Tb4b4b4,
Te6edf3rightTff7b72=T79c0ff2Tb4b4b4,
Tb4b4b4)
Te6edf3options Tff7b72= Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffoptionsTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffWEIGHTTb4b4b4, Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffright_area_widthTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8ffcontentsTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3overlayTb4b4b4, Te6edf3optionsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffcolumnsTff7b72.Td2a8fffocus_position Tff7b72= T79c0ff1
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffload_pageTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3cached Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_cachedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3cached Tff7b72= Tff7b72None
Tff7b72if Te6edf3cachedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3cached
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffloopbackTb4b4b4:
Te6edf3load_thread Tff7b72= Te6edf3threadingTff7b72.Td2a8ffThreadTb4b4b4(Te6edf3targetTff7b72=Tff7b72selfTff7b72.Td2a8ff__loadTb4b4b4)
Te6edf3load_threadTff7b72.Td2a8ffsetDaemonTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3load_threadTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffBrowser handling local page: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3page_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffpagespathTff7b72+Tff7b72selfTff7b72.Td2a8ffpathTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff/pageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Te6edf3page_data Tff7b72= Ta5d6ffbTa5d6ff"Ta5d6ffThe requested local page did not exist in the file systemTa5d6ff"
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3page_pathTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3osTff7b72.Td2a8ffaccessTb4b4b4(Te6edf3page_pathTb4b4b4, Te6edf3osTff7b72.Td2a8ffX_OKTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrequest_data Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3env_map Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_data
Tff7b72elseTb4b4b4:
Te6edf3env_map Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Ta5d6ff"Ta5d6ffPATHTa5d6ff" Tff7b72in Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4:
Te6edf3env_mapTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4]
Te6edf3generated Tff7b72= Te6edf3subprocessTff7b72.Td2a8ffrunTb4b4b4(Tb4b4b4[Te6edf3page_pathTb4b4b4]Tb4b4b4, Te6edf3stdoutTff7b72=Te6edf3subprocessTff7b72.Td2a8ffPIPETb4b4b4, Te6edf3envTff7b72=Te6edf3env_mapTb4b4b4)
Te6edf3page_data Tff7b72= Te6edf3generatedTff7b72.Td2a8ffstdout
Tff7b72elseTb4b4b4:
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3page_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3page_data Tff7b72= Te6edf3fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3page_data
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72def Td2a8ff__loadTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e# If an established link exists, but it doesn't match the target
T8b949e# destination, we close and clear it.
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72None Tff7b72and Tb4b4b4(Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffdestinationTff7b72.Td2a8ffhash Tff7b72!= Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72or Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffLinkTff7b72.Td2a8ffACTIVETb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
T8b949e# If no link to the destination exists, we create one.
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffNO_PATH
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3pr_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8fffirst_hop_timeoutTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72while Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3now Tff7b72> Te6edf3pr_timeTff7b72+Tff7b72selfTff7b72.Td2a8fftimeoutTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_timeoutTb4b4b4(Tb4b4b4)
Tff7b72return
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.25Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINK
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3identity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3destination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(
Te6edf3identityTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4,
Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4,
Tff7b72selfTff7b72.Td2a8ffapp_nameTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffaspects
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3established_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_closedTb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.1Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72!= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
T8b949e# Send the request
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUESTING
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Te6edf3receipt Tff7b72= Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrequestTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffpathTb4b4b4,
Te6edf3data Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_dataTb4b4b4,
Te6edf3response_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_receivedTb4b4b4,
Te6edf3failed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffrequest_failedTb4b4b4,
Te6edf3progress_callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progressed
Tb4b4b4)
Tff7b72if Te6edf3receiptTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_request_receipt Tff7b72= Te6edf3receipt
Tff7b72selfTff7b72.Td2a8fflast_request_id Tff7b72= Te6edf3receiptTff7b72.Td2a8ffrequest_id
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENT
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflink_establishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHED
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdirectoryTff7b72.Td2a8ffshould_identify_on_connectTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLink established, identifying to remote system...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_VERBOSETb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffidentifyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffidentityTb4b4b4)
Tff7b72def Td2a8fflink_closedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTED Tff7b72or Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink_establishment_timeoutTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflink_establishment_timeoutTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUT
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffresponse_receivedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffpage_data Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Tff7b72selfTff7b72.Td2a8ffmarkup Tff7b72= Tff7b72selfTff7b72.Td2a8ffpage_dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Tff7b72None
Te6edf3bgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!bg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3bgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3bgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3bg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3bgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_background_color Tff7b72= Te6edf3bg
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Tff7b72None
Te6edf3fgpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Ta5d6ff#!fg=Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3fgpos Tff7b72>Tff7b72= T79c0ff0Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4, Te6edf3fgposTb4b4b4)
Tff7b72if Te6edf3endposTff7b72-Tb4b4b4(Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4) Tff7b72== T79c0ff3Tb4b4b4:
Te6edf3fg Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Te6edf3fgposTff7b72+T79c0ff5Tb4b4b4:Te6edf3endposTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffpage_foreground_color Tff7b72= Te6edf3fg
Tff7b72selfTff7b72.Td2a8ffattr_maps Tff7b72= Te6edf3markup_to_attrmapsTb4b4b4(Te6edf3strip_modifiersTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)Tb4b4b4, Te6edf3url_delegateTff7b72=Tff7b72selfTb4b4b4, Te6edf3fg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_foreground_colorTb4b4b4, Te6edf3bg_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffpage_background_colorTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffloaded_from_cache Tff7b72= Tff7b72False
T8b949e# Simple header handling. Should be expanded when more
T8b949e# header tags are added.
Te6edf3cache_time Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDEFAULT_CACHE_TIME
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[Tb4b4b4:T79c0ff4Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff#!c=Ta5d6ff"Tb4b4b4:
Te6edf3endpos Tff7b72= Tff7b72selfTff7b72.Td2a8ffmarkupTff7b72.Td2a8fffindTb4b4b4(Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3endpos Tff7b72== Tff7b72-T79c0ff1Tb4b4b4:
Te6edf3endpos Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4)
Te6edf3cache_time Tff7b72= Tffa657intTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmarkupTb4b4b4[T79c0ff4Tb4b4b4:Te6edf3endposTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72and Tff7b72not Tff7b72selfTff7b72.Td2a8ffreloadingTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwrite_historyTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffhistory_dec Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffhistory_inc Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffreloading Tff7b72= Tff7b72False
Tff7b72if Te6edf3cache_time Tff7b72== T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, not caching due to header.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReceived page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, caching for Tffd700%.3fTa5d6ff hours.Ta5d6ff" Tff7b72% Tb4b4b4(Te6edf3cache_timeTff7b72/T79c0ff60Tff7b72/T79c0ff60Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcache_pageTb4b4b4(Te6edf3cache_timeTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3url_hashTb4b4b4)Tb4b4b4:
Te6edf3cachefile Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachefileTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoved Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachefileTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff from cache.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffget_cachedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3urlTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Te6edf3urlTb4b4b4)
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3cachepath Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Tff7b72tryTb4b4b4:
Te6edf3components Tff7b72= Te6edf3fileTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff64 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3expires Tff7b72= Tffa657floatTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3expiresTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3fileTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3url_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFound Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in cache.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffReturning cached pageTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3cachepathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3data Tff7b72= Te6edf3fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3data
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while parsing cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachepathTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff, removing it.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAdditionally, an exception occurred while unlinking the entry: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffYou will probably need to remove this entry manually by deleting the file: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachepathTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffclean_cacheTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3files Tff7b72= Te6edf3osTff7b72.Td2a8fflistdirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTb4b4b4)
Tff7b72for Te6edf3file Tff7b72in Te6edf3filesTb4b4b4:
Te6edf3cachepath Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file
Tff7b72tryTb4b4b4:
Te6edf3components Tff7b72= Te6edf3fileTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff_Ta5d6ff"Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4) Tff7b72== T79c0ff2 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72== T79c0ff64 Tff7b72and Tffa657lenTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3expires Tff7b72= Tffa657floatTb4b4b4(Te6edf3componentsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3expiresTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale cache entry Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3fileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3osTff7b72.Td2a8ffunlinkTb4b4b4(Te6edf3cachepathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffcache_pageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3cache_timeTb4b4b4)Tb4b4b4:
Te6edf3url_hash Tff7b72= Tff7b72selfTff7b72.Td2a8ffurl_hashTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3url_hash Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not cache page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffuncache_pageTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3cache_expires Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72+Te6edf3cache_time
Te6edf3filename Tff7b72= Te6edf3url_hashTff7b72+Ta5d6ff"Ta5d6ff_Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cache_expiresTb4b4b4)
Te6edf3cachefile Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcachepathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3filename
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3cachefileTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffwriteTb4b4b4(Tff7b72selfTff7b72.Td2a8ffpage_dataTb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCached page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3cachefileTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not write cache file for page Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcurrent_urlTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8fffile_receivedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tffa657typeTb4b4b4(Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4) Tff7b72== Te6edf3ioTff7b72.Td2a8ffBufferedReaderTb4b4b4:
Tff7b72if Te6edf3request_receiptTff7b72.Td2a8ffmetadata Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3request_receiptTff7b72.Td2a8ffmetadataTb4b4b4[Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3file_handle Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffmoveTb4b4b4(Te6edf3file_handleTff7b72.Td2a8ffnameTb4b4b4, Te6edf3file_destinationTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3file_name Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3file_data Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponseTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3file_destination_name Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3file_nameTb4b4b4)
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_destination_name
Te6edf3counter Tff7b72= T79c0ff0
Tff7b72while Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_destinationTb4b4b4)Tb4b4b4:
Te6edf3counter Tff7b72+Tff7b72= T79c0ff1
Te6edf3file_destination Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72+Te6edf3file_destination_nameTff7b72+Ta5d6ff"Ta5d6ff.Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3counterTb4b4b4)
Te6edf3fh Tff7b72= Tffa657openTb4b4b4(Te6edf3file_destinationTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4)
Te6edf3fhTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3file_dataTb4b4b4)
Te6edf3fhTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72= Te6edf3file_destinationTff7b72.Td2a8ffreplaceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffdownloads_pathTff7b72+Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffDONE
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while handling file response. The contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffrequest_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3request_receipt Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3request_receiptTff7b72.Td2a8ffrequest_id Tff7b72== Tff7b72selfTff7b72.Td2a8fflast_request_idTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILED
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffrequest_timeoutTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72= Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUT
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffresponse_progressedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffprogress
Tff7b72selfTff7b72.Td2a8ffresponse_time Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffget_response_timeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffresponse_size Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse_size
Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse_transfer_size
Te6edf3now Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Te6edf3now
Tff7b72if Te6edf3now Tff7b72> Tff7b72selfTff7b72.Td2a8ffprogress_updated_atTff7b72+T79c0ff1Tb4b4b4:
Te6edf3td Tff7b72= Te6edf3now Tff7b72- Tff7b72selfTff7b72.Td2a8ffprogress_updated_at
Te6edf3pd Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progress Tff7b72- Tff7b72selfTff7b72.Td2a8ffprevious_progress
Te6edf3bd Tff7b72= Te6edf3pdTff7b72*Tff7b72selfTff7b72.Td2a8ffresponse_size
Tff7b72selfTff7b72.Td2a8ffresponse_speed Tff7b72= Tb4b4b4(Te6edf3bdTff7b72/Te6edf3tdTb4b4b4)Tff7b72*T79c0ff8
Tff7b72selfTff7b72.Td2a8ffprevious_progress Tff7b72= Tff7b72selfTff7b72.Td2a8ffresponse_progress
Tff7b72selfTff7b72.Td2a8ffprogress_updated_at Tff7b72= Te6edf3now
Tff7b72selfTff7b72.Td2a8ffupdate_displayTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffstatus_textTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONE Tff7b72and Tff7b72selfTff7b72.Td2a8ffresponse_transfer_size Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffresponse_time Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3response_time_str Tff7b72= Ta5d6ff"Tffd700{:.2f}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_timeTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3response_time_str Tff7b72= Ta5d6ff"Ta5d6ffNoneTa5d6ff"
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffpageTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_sizeTb4b4b4)
Te6edf3stats_string Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffarrow_dTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_transfer_sizeTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff in Ta5d6ff"Tff7b72+Te6edf3response_time_str
Te6edf3stats_string Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffs Ta5d6ff"Tff7b72+Tff7b72selfTff7b72.Td2a8ffgTb4b4b4[Ta5d6ff"Ta5d6ffspeedTa5d6ff"Tb4b4b4]Tff7b72+Te6edf3size_strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffresponse_transfer_sizeTff7b72/Tff7b72selfTff7b72.Td2a8ffresponse_timeTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff"Ta5d6ffbTa5d6ff"Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff/sTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffloaded_from_cacheTb4b4b4:
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff (cached)Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3stats_string Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffNO_PATHTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffNo path to destination knownTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffPATH_REQUESTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffPath requested, waiting for path...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffESTABLISHING_LINKTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffEstablishing link...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_TIMEOUTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishment timed outTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffLINK_ESTABLISHEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffLink establishedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUESTINGTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSending request...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_SENTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest sent, awaiting response...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_FAILEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest failedTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffREQUEST_TIMEOUTTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffRequest timed outTa5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffRECEIVING_RESPONSETb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffReceiving response...Ta5d6ff"
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDONETb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsaved_file_name Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDoneTa5d6ff"Tff7b72+Te6edf3stats_string
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffSaved Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsaved_file_nameTb4b4b4)Tff7b72+Te6edf3stats_string
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffstatus Tff7b72== Te6edf3BrowserTff7b72.Td2a8ffDISCONECTEDTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffDisconnectedTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ffBrowser Status UnknownTa5d6ff"
Tff7b72class T56d364ResponseProgressBarTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffProgressBarTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3emptyTb4b4b4, Te6edf3fullTb4b4b4, Te6edf3currentTff7b72=Tff7b72NoneTb4b4b4, Te6edf3doneTff7b72=Tff7b72NoneTb4b4b4, Te6edf3sattTff7b72=Tff7b72NoneTb4b4b4, Te6edf3ownerTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Te6edf3emptyTb4b4b4, Te6edf3fullTb4b4b4, Te6edf3currentTff7b72=Te6edf3currentTb4b4b4, Te6edf3doneTff7b72=Te6edf3doneTb4b4b4, Te6edf3sattTff7b72=Te6edf3sattTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffowner Tff7b72= Te6edf3owner
Tff7b72def Td2a8ffget_textTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffresponse_speedTb4b4b4: Te6edf3speed_str Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyspeedTb4b4b4(Tff7b72selfTff7b72.Td2a8ffownerTff7b72.Td2a8ffresponse_speedTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3speed_str Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ffReceiving response Ta5d6ff"Tff7b72+Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_textTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff%Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff%Ta5d6ff"Tb4b4b4)Tff7b72+Te6edf3speed_str
T8b949e# A convenience function for printing a human-
T8b949e# readable file size
Tff7b72def Td2a8ffsize_strTb4b4b4(Te6edf3numTb4b4b4, Te6edf3suffixTff7b72=Ta5d6ff'Ta5d6ffBTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72if Te6edf3suffix Tff7b72== Ta5d6ff'Ta5d6ffbTa5d6ff'Tb4b4b4:
Te6edf3num Tff7b72*Tff7b72= T79c0ff8
Te6edf3units Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffKTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffMTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffGTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffTTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffPTa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffETa5d6ff'Tb4b4b4,Ta5d6ff'Ta5d6ffZTa5d6ff'Tb4b4b4]
Te6edf3last_unit Tff7b72= Ta5d6ff'Ta5d6ffYTa5d6ff'
Tff7b72for Te6edf3unit Tff7b72in Te6edf3unitsTb4b4b4:
Tff7b72if Tffa657absTb4b4b4(Te6edf3numTb4b4b4) Tff7b72< T79c0ff1000.0Tb4b4b4:
Tff7b72if Te6edf3unit Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.0fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3unitTb4b4b4, Te6edf3suffixTb4b4b4)
Te6edf3num Tff7b72/Tff7b72= T79c0ff1000.0
Tff7b72return Ta5d6ff"Tffd700%.2fTffd700%sTffd700%sTa5d6ff" Tff7b72% Tb4b4b4(Te6edf3numTb4b4b4, Te6edf3last_unitTb4b4b4, Te6edf3suffixTb4b4b4)
Tff7b72class T56d364UrlDialogLineBoxTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffLineBoxTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffescTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdelegateTff7b72.Td2a8ffclose_dialogsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3UrlDialogLineBoxTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
Tff7b72class T56d364UrlEditTb4b4b4(Te6edf3urwidTff7b72.Td2a8ffEditTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffkeypressTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3key Tff7b72== Ta5d6ff"Ta5d6ffenterTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconfirmedTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Te6edf3UrlEditTb4b4b4, Tff7b72selfTb4b4b4)Tff7b72.Td2a8ffkeypressTb4b4b4(Te6edf3sizeTb4b4b4, Te6edf3keyTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────